int main()
{
    // 任何表达式都有一个值类别；一个表达式要么是左值，要么是右值 : 左值（可取地址）x；右值（不可取地址)
    // 泛左值是指，具有身份（Has identity）的表达式。
    // 纯右值是没有身份（No identity）的表达式。

    //  int x{42};
    // 这个表达式都是有身份的，也就是泛左值表达式

    //  42;
    // 40 + 2;
    // 这里的两个表达式都不具有身份，因此它们都是纯右值表达式
    // 两个值相同的纯右值表达式无法区分彼此，但两个值相同的泛左值表达式可以明确地通过其所指代的实体来区分

    // 泛左值、纯右值这一对概念和之前提到的左值、右值概念非常接近。大部分泛左值就是左值，而纯右值表达式必然是右值。
    // 两者之间的差异在于亡值（xvalue）：亡值是泛左值，但它是右值
    // Coord{4, 4}.x;
    // Coord{4, 4}.y;
    // 这里的两个表达式就是亡值了。亡值是泛左值的一部分，也就是说它们是有身份的
    // 但亡值作为右值又不能出现在赋值运算符左侧，也不能取地址。也正因为亡值和纯右值都具有这样的性质，因此合称它们为右值

    // 左值相当于一个变量
    // 右值相当于临时值

    // 创建一个左值引用
    int m{1};
    int &n{m};
    // 创建一个右值引用
    int &&a{11};
    return 0;
}